# -*- coding:utf-8 -*-
# -------------------------------------------------------------------------------
# Description:  
# Reference:
# Author: 安智军
# Date:   2021/11/17
# -------------------------------------------------------------------------------
'''
单例设计模式
'''
import platform
import time
from appium import webdriver as appdriver
from selenium import webdriver
from Common.GetLog import GetLog

log = GetLog.get_logger()  # 调用日志器


class GetDriver:
    __app_driver = None # app驱动
    __web_driver = None # web驱动

    # @classmethod  # UI自动化暂时用不到
    # def get_app_driver(cls): # 获取app驱动
    #     if cls.__app_driver is None:
    #         log.info("正在初始化app驱动")
    #         des_cap = {
    #             "platform": "android",  # 表示是安卓或者ios
    #             "platformVersion": "5.1.1",  # 表示平台系统的版本号
    #             "deviceName": "emulator-5554",  # 表示连接设备的名称(如果只有一个设备, 可以用****代替)
    #             "appPackage": Common.appPackage,  # 这里写要启动的app的包名
    #             "appActivity": pratics.appActivity,  # 这里写要启动的app的界面名
    #
    #             "resetKeyboard": True,  # 重置设备的输入键盘(K要大写)死套路
    #             "unicodeKeyboard": True,  # 采用unicode编码输入(K要大写)死套路
    #
    #             # "noReset": True  # 用来记住app的session. 类似web自动化里的session, 可以记住cookie
    #         }
    #         cls.__app_driver = appdriver.Remote("http://localhost:4723/wd/hub", des_cap)  # 死套路
    #     return cls.__app_driver
    # @classmethod
    # def quit_app_driver(cls): # 关闭app驱动
    #     if cls.__app_driver is not None:
    #         log.info("正在关闭app驱动")
    #         time.sleep(1)
    #         cls.__app_driver.quit()
    #         cls.__app_driver = None  # app用完后一定要置空

    # Chrome浏览器
    @classmethod
    def get_web_Chrome_driver(cls, url):  # 获取Chrome驱动
        if cls.__web_driver is None:
            log.info("正在初始化Chrome浏览器驱动")
            if platform.system() == "Linux":  # UI自动化将在linux平台运行
                log.info("UI自动化将在linux平台运行")
                options = webdriver.ChromeOptions() # 创建chrome参数对象
                options.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错
                options.add_argument('window-size=1600x900')  # 指定浏览器分辨率
                options.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bug
                options.add_argument('--hide-scrollbars')  # 隐藏滚动条, 应对一些特殊页面
                options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
                options.add_argument('--headless')  # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
                cls.__web_driver = webdriver.Chrome(options=options, executable_path='/usr/bin/chromedriver')
            else:
                log.info("UI自动化将在windows平台运行")
                cls.__web_driver = webdriver.Chrome()

            cls.__web_driver.maximize_window() # 最大化浏览器窗口
            cls.__web_driver.get(url) # 打开指定的网页
        return cls.__web_driver

    # Firefox 浏览器
    @classmethod
    def get_web_Firefox_driver(cls, url):  # 获取Firefox驱动
        if cls.__web_driver is None:
            log.info("正在初始化Firefox浏览器驱动")
            cls.__web_driver = webdriver.Firefox()
            cls.__web_driver.maximize_window()
            cls.__web_driver.get(url)
        return cls.__web_driver

    # Ie浏览器
    @classmethod
    def get_web_Ie_driver(cls, url):  # 获取Ie驱动
        if cls.__web_driver is None:
            log.info("正在初始化Ie浏览器驱动")
            cls.__web_driver = webdriver.Ie()
            cls.__web_driver.maximize_window()
            cls.__web_driver.get(url)
        return cls.__web_driver

    @classmethod
    def quit_web_driver(cls): # 关闭webdriver
        if cls.__web_driver is not None:
            log.info("正在关闭浏览器驱动")
            cls.__web_driver.quit()
            cls.__web_driver = None  # 置空. 一定要把driver置空啊!!!!!!!!!!!!!!!!!!!!(用完就置空, 好习惯!!!)

if __name__ == '__main__':
    driver = GetDriver
    driver.get_web_Chrome_driver('http://www.baidu.com') # 测试打开网页
    time.sleep(10)
    driver.quit_web_driver()  # 测试关闭网页
    '''
    2021-11-17 11:12:31,804 INFO [root] [GetDriver.py(get_web_Chrome_driver:54)] - 正在初始化Chrome浏览器驱动
    2021-11-17 11:12:34,302 INFO [root] [GetDriver.py(quit_web_driver:83)] - 正在关闭浏览器驱动
    '''